آموزش جاوا - SE پایگاه داده(4) - JDBC و Connection (اتصال) به پایگاه داده
منبع:راسخون
JDBC (Java Database Connectivity):
JDBC مجموعه دستورات و مجموعه کلاسهایی است که برای برقراری ارتباط بین زبان جاوا و بانک اطلاعاتی استفاده می شود. برنامه ی جاوا را به سیستم مدیریت بانک اطلاعاتی (Mysql) و سپس به بانک اطلاعاتی خودمان وصل می کنیم و در نهایت اطلاعات جداول را می خوانیم و در برنامه نمایش می دهیم و یا در این جداول درج می کنیم.رابط برنامه کاربردی (API) JDBC به وسیله ی دو بسته تعریف شده است:
Java.Sql.
API ای را برای دستیابی و پردازش داده های ذخیره شده در یک پایگاه داده با استفاده از زبان برنامه نویسی جاوا فراهم می کند. این بسته مهمترین اشیا مورد استفاده مانند Connection ، ResultSet ، Statement و .. و همچنین کلاسها و رابط هایی برای بدست آوردن پایگاه داده و مجموعه نتایج Metadata را از سرور پایگاه داده فراهم می کند. همچنین شامل مجموعه ای از کلاسها و رابط هایی مانند DatabaseMetadata و ResultSetMetadata که با MetaData پایگاه داده سروکار دارد، می شود.Javax.Sql.
API ای را برای دسترسی به منبع داده سمت سرور(Server_Side) فراهم می کند. این بسته ضمیمه ی Java.Sql می باشد و سرویس هایی را برای J2EE فراهم می کند.با متد های Java در کلاس های Jdbc (بسته های Java.Sql و Javax.Sql) وارد می شویم و اشیا Jdbc (مانند ResultSet و DatabaseMetadata و ResultSetMetadata ) که نتایج پرس و جوی(Query) را نمایش می دهد، برمی گردانید.
DriverManager.(مدیر درایور)
این کلاس درایور های JDBC را در حافظه بارگذاری می کند و برای ساختن Java.Sql.Connection در پایگاه داده هایی از قبیل اراکل و MySql استفاده می شود.Connection. (اتصال)
این واسط یک اتصال با پایگاه داده را نشان می دهد که اگر MYSQL باشد روی پورت 3306 و اگر اراکل باشد ، روی پورت 1521 می باشد. کانکشن لوله ای ایجاد می کند که به دیتابیس وصل می کند.DatabaseMetaData.
این واسط اطلاعاتی در مورد پایگاه داده را فراهم می کند. شی Connection (اتصال) برای ساختن اشیا DatabaseMetaData استفاده می شود.Statement.
این واسط یک عبارت SQL را نشان می دهد و می تواند برای بازیابی اشیا ResultSet مورد استفاده قرار می گیرد. از طریق لوله ای که ایجاد شده، وارد دیتابیس می شود و یک سری کارهایی انجام می دهد و دستورات SQL را اجرا می کند.PreparedStatement.
این واسط دستورات را توسعه می دهد و دستورات SQL را نمایش می دهد و می تواند شی ResultSet را بازیابی کند.CallableStatement.
این واسط رویه (procedure) ذخیره شده یک پایگاه داده را نشان می دهد و همچنین می تواند رویه های ذخیره شده ی روی سرور پایگاه داده را اجرا کند.ResultSet.
این واسط مجموعه نتایج پایگاه داده را که با استفاده از دستور SELECT ایجاد شده، نمایش می دهد.Statement، PreparedStatement، CallableStatement و سایر اشیا JDBC می توانند اشیا ResultSet را بسازند.
ResultSetMetaData•
اين واسط اطلاعاتي را درباره انواع و مشخصات ستونها در شئ ResultSet فراهم می كند.SQL Exception•
اين كلاس يك كلاس استثنا است كه اطلاعاتي را درباره خطاهاي دستيابي به پايگاه داده و ساير خطاها مهيا مي كند.برای برنامه نویسی بانک اطلاعاتی باید به صورت زیر عمل کرد:
درایور یا کانکتور و یا همان jar فایل ها :
اپلیکیشن های جاوا باید از یک سری ساختارهای داخلی تشکیل شود تا بتواند به دیتابیس وصل شود. به همین دلیل درایور یا کانکتور و یا همان jar فایل ها به پروژه اضافه می شوند که در آنها کلاسهایی پیاده سازی شده تا بتواند جاوا را به بانک اطلاعاتی وصل کند. البته اگر محیط توسعه ای که استفاده می کنیم غیر از netbeans باشد و یا netbeans باشد ولی ورژن آن کمتر از 6 باشد، باید این jar فایل ها را دانلود کنیم و به پروژه اضافه کنیم.این jar فایل ها شامل چند فایل است. (مثل jar و zip) که از سایت تولید کننده ی آن بانک قابل دانلود است. jar فایل ها ی که ما برای اتصال mysql به جاوا استفاده می کنیم، aspectjrt-1.5.4.jar و mysql-connector-java-5.0.0.jar می باشند.
شاخه libraries برای تعریف کلاس کتابخانه ها که در پروژه استفاده می شود می باشد. اگر نیاز دارید که از کتابخانه ها و کلاسهای یک پروژه خارجی استفاده کنید می توانید آن را زیر شاخه ی کتابخانه اضافه کنید.
اضافه کردن JAR فایل ها به پروژه :
معرفی دو jar فایل در قالب یک libraries به netbeansابتدا از منوی tools گزینه ی libraries را انتخاب می کنیم :
روی آن کلیک می کنیم و از سمت راست گزینه ی Add Jar/Folder… را انتخاب می کنیم :
اضافه کردن library ساخته شده به پروژه
پروژه ای به نام database داریم. روی نام پروژه کلیک راست کرده و گزینه ی properties را انتخاب می کنیم .در صفحه باز شده از شاخه Libraries گزینه ی Add Library… را انتخاب می کنیم :
1- ابتدا باید بسته های لازم را وارد کرد.
قبل از اینکه از درایور JDBC استفاده کنیم و یک کانکشن را بکار ببریم، باید بسته های مربوطه را وارد کنیم. مانند:Import java.sql.*;
البته Netbeans به طور خودکار(با دادن پیغام) آنها را وارد می کند.
2- درایور های JDBC را باید وارد کرد.
به طور کلی زمانیکه خواستیم از درایور استفاده کنیم از فرمان Class.forName استفاده می کنیم. این یک لودر کلاس است.پس ابتدا باید کلاس درایور اصلی در JVM به صورت زیر لود شود(به حروف بزرگ و کوچک بودن آنها دقت کنید) :
Class.forName("com.mysql.jdbc.Driver");
سپس برای آن یک نمونه (instance) می سازیم:
Class.forName("com.mysql.jdbc.Driver").newInstance();
البته این درایورJDBC برای MySQL می باشد و برای درایور JDBC اراکل(oracle) از دستور زیر استفاده می کنیم:
Class.forName("oracle.jdbc.driver.OracleDriver");
این درایور باید واسط Java.sql.driver را اجرا کند و یک کلاس که کار آن مقدار دهی اولیه می باشد و در داخل کلاس Com.mysql.Jdbc.driver قرار دارد، درایور را با کلاس Java.Sql.DriverManager رجیستر می کند.
زمانیکه یک درایور JDBC لود می شود باید مطمئن شویم که درایور API پایگاه داده مشخص شده (Jar فایل) در متغییر محیطی CLASSPATH وجود داشته باشد.
3- اتصال (connection) به پایگاه داده را باید باز کنیم.
اکنون باید از ارتباط دهنده استفاده کنیم. این ارتباط دهنده در کلاس کانکشن می باشد . این ارتباط دهنده یک اینترفیس می باشد. اگر ما در ابتدا Import java.sql.*; را وارد کنیم، فقط اینترفیس کانکشن مورد نظر را پیشنهاد می کند.Connection con = DriverManager.getConnection(url);
که شامل نام کاربری (user name) و رمز عبور (password) و شماره پورت mysql (که استاندارد آن 3306 می باشد) می باشد. پس قبل از کد بالا باید خط زیر را بنویسیم:
String url="jdbc:mysql://localhost:3306/db1?user=root&password=123";
نام سرور، localhost (همان کامپیوتر خودمان) می باشد.
می توانیم شماره پورت 3306 را نیاوریم. این شماره به صورت پیشفرض است و اگر کسی آن را در مراحل نصب mysql ، تغییر داد، باید آن را اینجا وارد کند.
نام پایگاه داده که قبلا ایجاد کردیم، db1 می باشد.
نام کاربری آن، root می باشد و پسورد این پایگاه داده 123 می باشد که این را هنگام نصب mysql تعیین کرده ایم.
اکنون کانکشن برقرار شد و نیازی نیست con را open کنیم اما برای بسته شدن آن باید close کنیم.
4- اشیا Statement، PreparedStatement و CallableStatement را بسازیم.
تا مرحله ی قبل ارتباط دهنده برقرار شد اکنون سراغ فرمان دهنده می رویم. فرمان دهنده دستور statement است و ارتباط دهنده con است. با دستور زیر ارتباط دهنده ، فرمان دهنده را آماده می کند:Statement st= con.createStatement();
سپس با st کارهایمان را انجام می دهیم و انواع execute را انجام دهیم.
5- پرسجوی SQL را اجرا کنیم و شی ResultSet را برگرداند.
اگر execute ساده انجام دهیم، یک بولین برمی گرداند که می گوید که موفق بوده یا نه. اما اگر executeQuery انجام دهد، نتیجه را در resultset برمی گرداند. Resultset مجموعه ای از نتایج است که یک سطر را نمایش می دهد. به عنوان مثالst.executeQuery("select * from student");
6- شی ResultSet را پردازش کند.
7- اشیا ResultSet و Statment را ببندیم.
st.close();
8- اتصال (Connection) را ببندیم و ارتباط را قطع کنیم.
con.close();قبل از کد نویسی، از Try/Catch استفاده می کنیم و در قسمت catch دستور زیر را وارد می کنیم:
System.err.println(ex.getMessage());
بجای System.out.println دستور System.err.println را وارد کردیم تا خروجی به رنگ قرمز چاپ شود. که اگر در Try/catch خواستیم چاپ کنیم) که در واقع خطا می باشد( به رنگ قرمز چاپ شود.
به عنون مثال، اگر نام پایگاه داده را اشتباه تایپ کنیم، خطای زیر به رنگ قرمز چاپ می شود :
1 package first;
2 import java.sql.Connection;
3 import java.sql.DriverManager;
4 import java.sql.ResultSet;
5 import java.sql.Statement;
6 public class Tester {
7
8 public static void main(String[] args) {
9
10 try {
11
12 Class.forName("com.mysql.jdbc.Driver").newInstance();
13 String url= "jdbc:mysql://localhost:3306/db1?user=root&password=123";
14 Connection con=DriverManager.getConnection(url);
15 Statement st = con.createStatement();
16 st.executeQuery("select * from student");
17 ResultSet rs= st.getResultSet();
18
19 rs.close();
20 st.close();
21 con.close();
22
23 } catch (Exception ex) {
24 System.err.println(ex.getMessage());
25 }
26
27 }
28 }
/ج
{{Fullname}} {{Creationdate}}
{{Body}}